﻿/**********************************************************************
 * @file   GUIVisibilityDialog.h
 * @brief  可见性窗口管理
 * @author BaGuijun (baguijun@163.com)
 * @date   2024-12-23
 *********************************************************************/
#ifndef _GUIVisibilityDialog_H
#define _GUIVisibilityDialog_H

#include "GUIToolDialogAPI.h"
#include "GUIPickWidget.h"
#include "GUIWidget/GUIDialogBase.h"
#include <QList>

class QButtonGroup;

namespace Ui {
    class GUIVisibilityDialog;
}

namespace Interface {
    class FITKAbsVirtualTopo;
}

namespace GUI
{
    /**
     * @brief  可见性窗口管理
     * @author BaGuijun (baguijun@163.com)
     * @date   2024-12-23
     */
    class GUIToolDialogAPI GUIVisibilityDialog :public GUIDialogBase
    {
        Q_OBJECT;
    public:
        /**
         * @brief    构造函数
         * @author   BaGuijun (baguijun@163.com)
         * @date     2024-12-23
         */
        GUIVisibilityDialog();
        /**
         * @brief    析构函数
         * @author   BaGuijun (baguijun@163.com)
         * @date     2024-12-23
         */
        virtual ~GUIVisibilityDialog();
    private slots:
        ;
        /**
         * @brief    隐藏按钮点击窗口
         * @author   BaGuijun (baguijun@163.com)
         * @date     2024-12-24
         */
        void on_pushButton_Hide_clicked();
        /**
         * @brief    仅显示按钮点击事件
         * @author   BaGuijun (baguijun@163.com)
         * @date     2024-12-24
         */
        void on_pushButton_ShowOnly_clicked();
        /**
         * @brief    显示全部按钮点击事件
         * @author   BaGuijun (baguijun@163.com)
         * @date     2024-12-24
         */
        void on_pushButton_ShowAll_clicked();
        /**
         * @brief    反向显示按钮点击事件
         * @author   BaGuijun (baguijun@163.com)
         * @date     2024-12-24
         */
        void on_pushButton_InvertSelection_clicked();
        /**
         * @brief    关闭按钮点击事件
         * @author   BaGuijun (baguijun@163.com)
         * @date     2024-12-24
         */
        void on_pushButton_Close_clicked();
    private:
        /**
         * @brief    显示或隐藏
         * @param[i] type       类型
         * @param[i] isShow     是否显示
         * @author   BaGuijun (baguijun@163.com)
         * @date     2024-12-24
         */
        void showOrHide(GUIDialogPickType type, bool isShow, QList<int> idList = QList<int>());
        /**
         * @brief    更新模型树界面item状态（该函数的调用需在刷新渲染之前）
         * @author   BaGuijun (baguijun@163.com)
         * @date     2025-01-16
         */
        void updateModelTreeWidgetItem();
        /**
         * @brief    获取所有的几何对象中的所有虚拓扑对象
         * @return   QList<Interface::FITKAbsVirtualTopo*>             虚拓扑列表
         * @author   BaGuijun (baguijun@163.com)
         * @date     2025-02-18
         */
        QList<Interface::FITKAbsVirtualTopo*> getAllGeometryVirTopos();
        /**
         * @brief    检查几何线是否显示
         *           与《检查集合点是否显示》函数同时使用时需要优先调用《检查几何线是否显示》
         * @author   BaGuijun (baguijun@163.com)
         * @date     2025-02-19
         */
        void checkGeoEdgeIsShow();
        /**
         * @brief    检查几何点是否显示
         *           与《检查集合线是否显示》函数同时使用时需要优先调用《检查几何线是否显示》
         * @author   BaGuijun (baguijun@163.com)
         * @date     2025-02-19
         */
        void checkGeoPointIsShow();
    private:
        /**
         * @brief  ui
         * @author BaGuijun (baguijun@163.com)
         * @date   2024-12-23
         */
        Ui::GUIVisibilityDialog* _ui = nullptr;
        /**
         * @brief  拾取界面
         * @author BaGuijun (baguijun@163.com)
         * @date   2024-12-25
         */
        GUIPickWidget* _pickWidget = nullptr;
        /**
         * @brief  是否检查几何关联关系
         * @author BaGuijun (baguijun@163.com)
         * @date   2025-02-19
         */
        bool _isCheckGeoConnect = false;
    };
}

#endif
